The number and types of network devices are growing rapidly. Consequently, there are widely varying capabilities of connected devices—ranging from high-end gaming computers (with powerful processors, graphics processing capabilities, and fast network connections), through laptops and netbooks, to smartphones and feature phones with lower levels of functionality, energy reserves, and performance. Consequently, such a diverse set of ever-evolving devices makes it difficult for software developers to design software for relatively consistent performance and user experience. Developers are then limited to targeting software to a broad spectrum of devices without providing an product that can address and exploit the features and capabilities of the various device types while maintain a satisfying user experience.